package Entite;

import java.util.ArrayList;

public class Partie {
	
	public enum enumEquipe { Equipe1, Equipe2 };
	
	private int m_periode = 0;
	private Equipe m_equipe1;
	private Equipe m_equipe2;
	private ArrayList<But> m_butListe;
	
	public int getPeriode()
	{
		return m_periode;
	}

	public void setPeriode()
	{
		m_periode++;	
	}
	
	public Equipe getEquipe(enumEquipe pEnumEquipe)
	{
		switch (pEnumEquipe) {
		
		
		case Equipe1:
			if (m_equipe1 == null)
				m_equipe1 = new Equipe();
			
			return m_equipe1;

			
		case Equipe2:
			if (m_equipe2 == null)
				m_equipe2 = new Equipe();
			
			return m_equipe2;
			
			
		default: return null;
		
		}	
	}
	
	public void setEquipe(enumEquipe pEnumEquipe, Equipe pEquipe)
	{
		switch (pEnumEquipe) {
		
		case Equipe1: m_equipe1 = pEquipe;
		break;

		case Equipe2: m_equipe2 = pEquipe;
		break;
			
		default:
			break;
		}	
	}
	
	public ArrayList<But> getButListe()
	{
		if (m_butListe == null)
			m_butListe = new ArrayList<But>();
		
		return m_butListe;
	}
	
	public Partie()
	{

	}
	
	private Joueur ChercherJoueur(int pNumeroJoueur)
	{
		Joueur joueur;
		
		joueur = getEquipe(enumEquipe.Equipe1).ChercherJoueur(pNumeroJoueur);
		if (joueur == null)
			joueur = getEquipe(enumEquipe.Equipe2).ChercherJoueur(pNumeroJoueur);
		
		return joueur;
	}
	
	public boolean DemarrerPartie()
	{
		if (getEquipe(enumEquipe.Equipe1).getJoueurListe().size() != 5)
			return false;
		
		if (getEquipe(enumEquipe.Equipe2).getJoueurListe().size() != 5)
			return false;
		
		int cpt = 0;
		for (Joueur j : getEquipe(enumEquipe.Equipe1).getJoueurListe()) {
			if (j.getEstSurBanc())
				cpt++;
		}
		if (cpt != 2)
			return false;
		
		cpt = 0;
		for (Joueur j : getEquipe(enumEquipe.Equipe2).getJoueurListe()) {
			if (j.getEstSurBanc())
				cpt++;
		}
		if (cpt != 2)
			return false;
		
		setPeriode();
		
		return true;
	}
	
	public void ProchainePeriode()
	{
		setPeriode();
	}
	
	public void AjouterBut(But pBut)
	{
		getButListe().add(pBut);
	}
	
	public int StatistiquesScore(enumEquipe pEnumEquipe)
	{
		int score = 0;
		
		switch (pEnumEquipe) {
		
		case Equipe1:
			for (But b : getButListe()) {
				if (getEquipe(enumEquipe.Equipe1).getJoueurListe().contains(b.getJoueur()))
					score++;
			}
		break;

		case Equipe2:
			for (But b : getButListe()) {
				if (getEquipe(enumEquipe.Equipe2).getJoueurListe().contains(b.getJoueur()))
					score++;
			}
			break;
			
		default: break;
		
		}
		
		return score;
	}
	
	public String[] StatistiquesJoueursEtoile()
	{
		ArrayList<Joueur> joueurListe = new ArrayList<Joueur>();
		int[][] statistiques = new int[3][3];
		String[] resultats = new String[3];
		
		for (But b : getButListe()) {
			if (!joueurListe.contains(b.getJoueur()))
				joueurListe.add(b.getJoueur());
		}
		
		int cptBut = 0;
		int cptPasse = 0;
		
		for (Joueur j : joueurListe) {
			
			for (But b : getButListe()) {
				
				if (b.getJoueur() == j)
					cptBut++;
				
				if (b.getAideListe().contains(j))
					cptPasse++;
			}
			
			for (int i = 0; i < 3; i++) {
				if (cptBut > statistiques[i][1])
				{
					statistiques[i][0] = j.getNumeroJoueur();
					statistiques[i][1] = cptBut;
					statistiques[i][2] = cptPasse;
					break;
				}
				if (cptBut == statistiques[i][1])
				{
					if (cptPasse > statistiques[i][2])
					{
						statistiques[i][0] = j.getNumeroJoueur();
						statistiques[i][1] = cptBut;
						statistiques[i][2] = cptPasse;
					}
					break;
				}
				
			}
		}
		
		for (int i = 0; i < 3; i++) {
			resultats[i] = ChercherJoueur(statistiques[i][0]).getNom() + " " + String.valueOf(statistiques[i][1]) + " B " + String.valueOf(statistiques[i][2]) + " B ";
		}
		
		return resultats;
	}
}
